﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace NCRE学生考试端V1._0
{
    public class CopyFolder
    {
        #region"复制文件夹"
                /// <summary>
                /// 复制文件夹
                /// </summary>
                /// <param name="strFromPath"></param>
                /// <param name="strToPath"></param>
                /// <returns></returns>
                public static Boolean Copy(string strFromPath, string strToPath)
                {
                    Boolean flag = false;
                    //如果源文件夹不存在，则创建
                    if (!Directory.Exists(strFromPath))
                    {
                        Directory.CreateDirectory(strFromPath);
                    }
                    //取得要拷贝的文件夹名
                    string strFolderName = strFromPath.Substring(strFromPath.LastIndexOf("\\") +
                      1, strFromPath.Length - strFromPath.LastIndexOf("\\") - 1);
                    //如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
                    if (!Directory.Exists(strToPath + "\\" + strFolderName))
                    {
                        Directory.CreateDirectory(strToPath + "\\" + strFolderName);
                    }
                    //创建数组保存源文件夹下的文件名
                    string[] strFiles = Directory.GetFiles(strFromPath);
                    //循环拷贝文件
                    for (int i = 0; i < strFiles.Length; i++)
                    {
                        //取得拷贝的文件名，只取文件名，地址截掉。
                        string strFileName = strFiles[i].Substring(strFiles[i].LastIndexOf("\\") + 1, strFiles[i].Length - strFiles[i].LastIndexOf("\\") - 1);
                        //开始拷贝文件,true表示覆盖同名文件
                        File.Copy(strFiles[i], strToPath + "\\" + strFolderName + "\\" + strFileName, true);
                    }
                    //创建DirectoryInfo实例
                    DirectoryInfo dirInfo = new DirectoryInfo(strFromPath);
                    //取得源文件夹下的所有子文件夹名称
                    DirectoryInfo[] ZiPath = dirInfo.GetDirectories();
                    for (int j = 0; j < ZiPath.Length; j++)
                    {
                        //获取所有子文件夹名
                        string strZiPath = strFromPath + "\\" + ZiPath[j].ToString();
                        //把得到的子文件夹当成新的源文件夹，从头开始新一轮的拷贝
                         Copy(strZiPath, strToPath + "\\" + strFolderName);
                    }
                    flag = true;
                    return flag;
           
                }
        #endregion

        #region"删除文件夹"
        /// <summary>
        /// 删除文件夹
        /// </summary>
        /// <param name="strFromPath"></param>
        /// <param name="strToPath"></param>
        /// <returns></returns>
        public static Boolean DeleteDirectory(string path)
        {
            Boolean flag = false;
            DirectoryInfo dir = new DirectoryInfo(path);
            if (dir.Exists)
            {
                DirectoryInfo[] childs = dir.GetDirectories();
                foreach (DirectoryInfo child in childs)
                {
                    child.Delete(true);
                }
                dir.Delete(true);
                 flag = true;
            }
            return flag;
        }
        #endregion

        #region 删除这个目录下的所有子目录和文件
        //删除这个目录下的所有文件及文件夹
        public static void deleteTmpFiles(string strPath)
        {
            //删除这个目录下的所有子目录
            if (Directory.GetDirectories(strPath).Length > 0)
            {
                foreach (string var in Directory.GetDirectories(strPath))
                {
                    //DeleteDirectory(var);
                    Directory.Delete(var, true);
                    //DeleteDirectory(var);
                }
            }
            //删除这个目录下的所有文件
            if (Directory.GetFiles(strPath).Length > 0)
            {
                foreach (string var in Directory.GetFiles(strPath))
                {
                    File.Delete(var);
                }
            }
        }
        #endregion

    }
}
